#ifndef _STACK__H__
#define _STACK__H__

#define STACK_SIZE 100
#define STACK_EMPTY 1

typedef struct stack_OPTR //运算符
{
	char element[STACK_SIZE];
	int top;
}OPTR;

typedef struct Node 
{
	char data;/*数据域*/
	struct Node* leftChild;/*左子树指针*/
	struct Node* rightChild;/*右子树指针*/
}BiTreeNode, * BiTree;

typedef struct stack_BiTree
{
	BiTreeNode element[STACK_SIZE];
	int top;
}stack_BiTree;


void Stack_Init_OPTR(OPTR* ptr); //初始化运算符栈
bool JUdge_Stack_OPTR(OPTR* ptr);//判断操作符栈是否空
void Stack_Push_OPTR(OPTR* stack, char new_element); //操作符入栈
char Stack_Pop_OPTR(OPTR* stack); //从操作符栈顶取出一个元素

void Stack_Init_BiTree(stack_BiTree* ptr);//初始化二叉树栈
bool JUdge_Stack_BiTree(stack_BiTree* ptr);//判断二叉树栈是否空
void Stack_Push_BiTree(stack_BiTree* stack, BiTreeNode NewNode); //二叉树结点入栈
BiTree Stack_Pop_BiTree(stack_BiTree* stack); //从二叉树栈顶取出一个元素

int getIndex(char theta); //获取theta所对应的索引
char getPriority(char theta1, char theta2);

BiTree ExpTree_Create(BiTree left, BiTree right, char ch);//创建一个表达式二叉树

#endif // !_STACK_H__

